home *** CD-ROM | disk | FTP | other *** search
- The InfoTaskForce Guide to the Infocom Data File Structure
- ==========================================================
- Copyright (c) 1992 InfoTaskForce
-
-
- Type 3 (Standard) Data File.
- ----------------------------
-
-
- From: start_of_data_file
- To: size of header - 1
- Data: Header.
-
- From: size of header
- To: common_word_ptr - 1
- Data: Common Word Table.
-
- From: common_word_ptr
- To: common_word_ptr + ( 3 * 32 * 2 ) ~ ( object_list - 1 )
- Data: Common Word Table Index.
- This table consists of 3 banks of 32 entries - each entry consists
- of a 2 byte page/offset combination giving the start of the "common
- word" within the data file. This should be a location in the Common
- Word Table.
-
- From: object_list
- To: object_list + global_prop_size - 1
- Global Property Table.
-
- From: object_list + global_prop_size
- To: prop_ptr of Object 1 - 1
- Object / Room List.
- This starts with Object 0 which is all zeros. Object 1 is actually
- the first object.
-
- From: prop_ptr of Object 1
- To: global_vars - 1
- Data: Object's Property Lists.
- Properties within each Object's Propertry List are arranged in
- descending order. If a property cannot be found in this list, it is
- assumed to be in the Global Property Table.
-
- From: global_vars
- To: input_word_buffer - 1
- Global Variable Table.
-
- Variable 0 = Current Stack Entry.
- Variable 1 - 15 = Local Variables on Z-Machine's Stack.
- Variable 16 - 255 = two byte entries in this table.
- Note that there may be up to 255 variables. Thus
- this table may contain upto 240 entries ($1E0
- bytes).
- Variable 16 = Current Location.
- Variable 17 = Score / Hour.
- Variable 18 = No. Moves / Minutes.
-
- From: input_word_buffer
- To: input_word_buffer + ( buffer_length * 2 ) - 1
- ~ ( input_character_buffer - 1 )
- Data: Input Routine's Word Buffer.
- First byte of the buffer contains the buffer length in words
- (including this byte).
-
- From: input_character_buffer
- To: input_character_buffer + buffer_length - 1
- Data: Input Routine's Character Buffer.
- First byte of the buffer contains the buffer length in bytes
- (including this byte).
-
- From: input_character_buffer + buffer_length
- To: save_bytes - 1
- Data: ???
-
- From: save_bytes
- To: vocab_ptr - 1
- Data: ???
-
- From: vocab_ptr
- To: vocab_ptr
- Data: Size of "End Of Sentence" (EOS) Character Table.
-
- From: vocab_ptr + 1
- To:: vocab_ptr + EOS Table Size
- Data: "End Of Sentence" Character Table.
-
- From: vocab_ptr + EOS Table Size + 1
- To: vocab_ptr + EOS Table Size + 1
- Data: Size of each Vocabulary Table Entry.
-
- From: vocab_ptr + EOS Table Size + 2
- To: vocab_ptr + EOS Table Size + 3
- Data: Number of Vocabulary Table Entries.
-
- From: vocab_ptr + EOS Table Size + 4
- To: resident_bytes - 1
- Data: Vocabulary Table.
- (vocab_ptr + EOS Table Size + 4 + ( Size of Vocab Entry * Number of
- Entries )) * resident_bytes - 1.
-
- From: resident_bytes
- To: end of data file
- Data: Z-Code.
-
-
- Note:
- -----
-
- * For Type 1 Data Files, there is no Common Word Table or
- Common Word Table Index. In this case, object_list * size of
- header.
-
- * For Type 2 Data Files, the Common Word Table and Common
- Word Table Index are smaller than for Type 3 Data Files. There
- is only one bank of 32 entries in the Common Word Table Index.
- Here, ( common_word_ptr + ( 1 * 32 * 2 )) * ( object_list - 1 ).
-
- * For Types 1 - 3, global_prop_size = $35.
- For Types 4 - 5, global_prop_size = $70.
-
- * The location of the input_word_buffer and the
- input_character_buffer can only be found by examining parameters
- passed to the input routine.
-
-
-
-
- The Infocom Data File Header.
- -----------------------------
-
- /*
- ** Infocom Game Header Structure.
- */
-
- struct header
- {
- byte z_code_version ; /* Game's Z-CODE Version Number */
- byte mode_bits ; /* Status Bar display indicator */
- word release ; /* Game Release Number */
- word resident_bytes ; /* No. bytes in the Resident Area */
- word start ; /* Offset to Start of Game */
- word vocab ; /* Offset to VocabtList */
- word object_list ; /* Offset to Object/Room List */
- word globals ; /* Offset to Global Variables */
- word save_bytes ; /* No. bytes in the Save Game Area */
- word script_status ; /* Z-CODE printing modes */
- char serial_no[6] ; /* Game's Serial Number */
- word common_word ; /* Offset to Common Word List */
- word verify_length ; /* No. words in the Game File */
- word verify_checksum ; /* Game Checksum - used by Verify */
- byte interpreter_number ; /* Number - Set by Interpreter */
- byte interpreter_version ; /* ASCII Char - Set by Interpreter */
- byte screen_height ; /* Screen Height - Set by Interpreter*/
- byte screen_width ; /* Screen Width - Set by Interpreter*/
- byte left ; /* Left Coord. - Set by Interpreter */
- byte right ; /* Right Coord. - Set by Interpreter */
- byte top ; /* Top Coord. - Set by Interpreter */
- byte bottom ; /* Bottom Coord. - Set by Interpreter*/
- byte max_char_width ; /* Max. Char. Width - Set by Interp. */
- byte max_char_height ; /* Max. Char. Height - Set by Interp.*/
- word padding1[3] ; /* Blank */
- word function_keys ; /* Offset to Function Keys */
- word padding2[2] ; /* Blank */
- word alternate_alphabet ; /* Offset to Alternate Alphabet */
- word mouse_position ; /* Offset to Mouse Position */
- word padding3[4] ; /* Blank */
- } ;
-
- /*
- ** Header Information.
- **
- ** The 'z_code_version' byte has the following meaning:
- ** $00 : Not Used
- ** $01 : Game compiled for an early version of the interpreter
- ** $02 : Game compiled for an early version of the interpreter
- ** $03 : Game compiled for the current 'Standard Series Interp'
- ** $04 : Game compiled for the current 'Plus Series Interpreter'
- ** $05 : Game compiled for the current 'Advanced Series Interp'
- ** $06 : Game compiled for the current 'Graphics Series Interp'
- **
- ** The 'mode_bits' byte performs the following functions:
- ** Bit 0 : Clear - Standard: Game Data Normal.
- ** Set - Standard: Game Data Byte Swapped.
- ** Clear - Advanced: No Colour.
- ** Set - Advanced: Colour.
- ** Bit 1 : Clear - Status Bar displays the SCORE.
- ** Set - Status Bar displays the TIME.
- ** Bit 2 : Clear - Plus: Normal data space.
- ** Set - Plus: Data space should be 64K.
- ** Bit 3 : Clear - Standard: Normal.
- ** Set - Standard: "Licensed to Tandy Corp" Flag.
- ** Clear - Plus: Capitalise instead of Underline.
- ** Set - Plus: Has Underline Capability.
- ** Bit 4 : Clear - Status Bar Available.
- ** Set - Status Bar not Available.
- ** Bit 5 : Clear - Split Screens not Available.
- ** Set - Split Screens Available.
- ** Bit 6 : Clear
- ** Set
- ** Bit 7 : Clear
- ** Set
- **
- ** The 'script_status' word is used by Z-CODE to set printing modes
- ** for use by the interpreter:
- ** Bit 0 : Clear - Script mode off.
- ** Set - Script mode on.
- ** Bit 1 : Clear - Use any type of Font.
- ** Set - Use a Non-Proportional Font only.
- ** Bit 3 : Clear - Advanced: No Graphics.
- ** Set - Advanced: Graphics Available.
- ** Bit 4 : Clear - Standard: No Sound.
- ** Set - Standard: Sound Available.
- ** Clear - Advanced: No Undo.
- ** Set - Advanced: Undo Available.
- ** Bit 6 : Clear - Advanced: No Colour.
- ** Set - Advanced: Colour Available.
- ** Bit 7 : Clear - Advanced: No Sound.
- ** Set - Advanced: Sound Available.
- ** Bit 10 : Clear - Printer OK.
- ** Set - Printer Error (e.g.: Not Connected ).
- */
-
- /*
- ** "mode_bits" Bit Definitions:
- */
-
- #define GAME_DATA_NORMAL ((byte)0xFE)
- #define GAME_DATA_SWAPPED ((byte)0x01)
- #define NO_COLOUR ((byte)0xFE)
- #define USE_COLOUR ((byte)0x01)
- #define USE_SCORE ((byte)0xFD)
- #define USE_TIME ((byte)0x02)
- #define NORMAL_DATA ((byte)0xFB)
- #define MAXIMUM_DATA ((byte)0x04)
- #define NON_TANDY ((byte)0xF7)
- #define TANDY ((byte)0x08)
- #define CAPITALISE ((byte)0xF7)
- #define UNDERLINE ((byte)0x08)
- #define STATUS_LINE ((byte)0xEF)
- #define NO_STATUS_LINE ((byte)0x10)
- #define NO_SCREEN_MODES ((byte)0xDF)
- #define SCREEN_MODES ((byte)0x20)
-
- /*
- ** "script_status" Bit Definitions:
- */
-
- #define SCRIPT_MODE_OFF ((word)0xFFFE)
- #define SCRIPT_MODE_ON ((word)0x0001)
- #define USE_ANY_FONT ((word)0xFFFD)
- #define USE_NON_PROP_FONT ((word)0x0002)
- #define NO_REFRESH ((word)0xFFFB)
- #define REFRESH ((word)0x0004)
- #define VERSION_5_NO_GRAPHICS ((word)0xFFF7)
- #define VERSION_5_GRAPHICS ((word)0x0008)
- #define VERSION_3_NO_SOUND ((word)0xFFEF)
- #define VERSION_3_SOUND ((word)0x0010)
- #define VERSION_5_CANT_UNDO ((word)0xFFEF)
- #define VERSION_5_CAN_UNDO ((word)0x0010)
- #define VERSION_5_NO_COLOUR ((word)0xFFBF)
- #define VERSION_5_COLOUR ((word)0x0040)
- #define VERSION_5_NO_SOUND ((word)0xFF7F)
- #define VERSION_5_SOUND ((word)0x0080)
- #define SCRIPT_OK ((word)0xFBFF)
- #define SCRIPT_ERROR ((word)0x0400)
-
- /*
- ** "interpreter_number" Byte Definitions:
- */
-
- #define XZIP ((byte)0x00)
- #define DEC_20 ((byte)0x01)
- #define APPLE_2E ((byte)0x02)
- #define MACINTOSH ((byte)0x03)
- #define AMIGA ((byte)0x04)
- #define ATARI_ST ((byte)0x05)
- #define IBM_MSDOS ((byte)0x06)
- #define COMMODORE_128 ((byte)0x07)
- #define C64 ((byte)0x08)
- #define APPLE_2C ((byte)0x09)
- #define APPLE_2GS ((byte)0x0A)
- #define TANDY_COLOR ((byte)0x0B)
-